package ru.niir.goodfil.db.handlers;

import ru.niir.goodfil.db.Setting;
import ru.niir.goodfil.utils.validation.*;
import ru.niir.goodfil.exceptions.InvalidIdException;
import ru.niir.goodfil.exceptions.ValidationException;
import ru.niir.goodfil.exceptions.WrongHandlerException;
import static org.apache.commons.lang.StringUtils.isEmpty;
import static org.apache.commons.lang.StringUtils.isBlank;

/**
 * Обработчик для настроек
 */
public class SettingHandler extends Handler
{
    /**
     * Конструктор
     */
    public SettingHandler(Goodfil gf)
    {
        super(Setting.class, gf);
    }

    /**
     * Проверки для настроек
     * 1. ключ задан
     * 3. значение задано
     */
    @Override
    public ValidationResult validate(Object o)
    {
        assert o != null;
        if (!(o instanceof Setting)) throw new WrongHandlerException(klass, o.getClass());

        Setting setting = (Setting) o;
        ValidationResult result = ValidationResult.Ok(klass);

        if (isBlank(setting.getKey()))
            result.addValidationError(new ValidationError("key", "Наименование", setting.getKey(), ValidationProblem.NOT_EMPTY));

        if (isBlank(setting.getValue()))
            result.addValidationError(new ValidationError("value", "Значение", setting.getValue(), ValidationProblem.NOT_EMPTY));

        return result;
    }

    /**
     * Удалять настройки с помощью функций Goodfil.delete не допускается
     */
    @Override
    public RemoveCheckResult removeCheck(long id) throws InvalidIdException
    {
        return RemoveCheckResult.Error(Setting.class);
    }

    /**
     * Создавать настройки с помощью функций Goodfil.save не допускается
     */
    @Override
    public CreateCheckResult createCheck(Object o) throws ValidationException
    {
        return CreateCheckResult.Error(klass, "Добавление настроек не допускается");
    }
}
